<?php

 include_once 'Connexion.class.php';
 include_once 'AvisDAO.class.php';
 include_once 'UserDAO.class.php';


 /*
 *  la classe ProduitDAO va servir de passerelle entre la base et le site, 
 *  elle va remplir des objets de type Produit
 *  Elle ajouter, modifier, supprimer, récupérer ces objets depuis la base.
 *  Elle hérite de Connexion pour récupérer l'objet PDO. 
 */
 
 
class ProduitDAO extends Connexion {
    
    public function __Construct() {
        parent::__Construct();
    }


    public function ajouterProduit(Produit $produit){
        $req = "INSERT INTO produit values(NULL, '".$produit->getNom()."', '".$produit->getDescription()."',  '".$produit->getCheminImage()."', ".$produit->getPrix().") ;";
        $res = $this->_PDO->exec($req);
        if($res == 1)
            return true;
        else
            return false;
    }


    public function getAllProduits(){
        $lesProduits = array();
        $stmt =  $this->_PDO->query("SELECT * FROM produit   ;");
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $lesProduits[] = $this->hydrateProduit($data);
            }
        }
        else
            $lesProduits = null;
        return $lesProduits;
        
    }
    
    public function getAllProduitsByRand(){
        $lesProduits = array();
        $stmt =  $this->_PDO->query("SELECT * FROM produit ORDER BY RAND() ;");
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $lesProduits[] = $this->hydrateProduit($data);
            }
        }
        else
            $lesProduits = null;
        return $lesProduits;
        
    }
    
    public function getProduitByRecherche($cherche){
        $lesProduits = array();
        $cherche = '%'.$cherche.'%';
        $stmt =  $this->_PDO->query("SELECT * FROM produit WHERE nom like '".$cherche."' OR description like '".$cherche."' ;");
        if($stmt->rowCount() > 0){
             while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $lesProduits[] = $this->hydrateProduit($data);
            }
        }
        else
            $lesProduits = null;
        return $lesProduits;
        
    }
    
    public function getProduitByIdAvis($idAvis){
        $produit;
        $stmt =  $this->_PDO->query("SELECT p.id, p.nom, description, cheminImg, prix, stock FROM produit p JOIN avis ON p.id = avis.IdProduit WHERE avis.id  = ".$idAvis." ;");
        if($stmt->rowCount() > 0){
            $produit = $this->hydrateProduit($stmt->fetch(PDO::FETCH_OBJ));
        }
        else
            $produit = null;
        return $produit;
        
    }
 
    public function getProduitById($idProduit){
        $produit;
        $stmt =  $this->_PDO->query("SELECT * FROM produit WHERE id = ".$idProduit." ;");
        if($stmt->rowCount() > 0){
            $produit = $this->hydrateProduit($stmt->fetch(PDO::FETCH_OBJ));
        }
        else
            $produit = null;
        return $produit;
        
    }
    
    public function modifierProduit(Produit $produit){
        $req = "UPDATE produit SET ";
        $req .= "nom = '".$produit->getNom()."', ";
        $req .= "description = '".$produit->getDescription()."', ";
        $req .= "cheminImg = '".$produit->getCheminImage()."', ";
        $req .= "prix = '".$produit->getPrix()."' ";
        $req .= "WHERE id = ".$produit->getReference()." ;";
        
        
        $res = $this->_PDO->exec($req);
        if($res == 1)
            return true;
        else
            return false;
        
    }
    
    
    public function decrementerStock($idProduit, $qteEnlever){
        $req = "UPDATE produit set stock = stock - $qteEnlever WHERE id = $idProduit ";
        $this->_PDO->exec($req);
    }
    
    
    public function supprimerProduit($idProduit){
        $res = $this->_PDO->exec("DELETE FROM produit WHERE id = ".$idProduit." ;");
        if($res == 1)
            return true;
        else
            return false;
    }


    public function hydrateProduit($data){
        return new Produit($data->id, $data->nom, $data->description, $data->cheminImg, $data->prix, $data->stock);
    }
    
    
    
    
    
}



?>
